const { contextBridge, ipcRenderer } = require('electron');

// 创建完整的 electronAPI 对象
const electronAPI = {
    // 桌面捕捉功能 - 这是关键修复
    desktopCapturer: {
        getSources: (options) => {
            console.log('[preload] 请求桌面捕捉源，选项:', options);
            return ipcRenderer.invoke('desktop-capturer:get-sources', options);
        }
    },

    // 窗口管理
    window: {
        minimize: () => ipcRenderer.invoke('window:minimize'),
        maximize: () => ipcRenderer.invoke('window:maximize'),
        close: () => ipcRenderer.invoke('window:close')
    },
    
    // 控制菜单栏可见性
    setMenuVisibility: (visible) => {
        console.log('[preload] 设置菜单栏可见性:', visible);
        return ipcRenderer.invoke('menu:set-visibility', visible);
    },

    // 对话框功能
    dialog: {
        showSaveDialog: (options) => ipcRenderer.invoke('dialog:show-save-dialog', options),
        showOpenDialog: (options) => ipcRenderer.invoke('dialog:show-open-dialog', options)
    },

    // 应用信息
    app: {
        getVersion: () => ipcRenderer.invoke('app:get-version')
    },
    
    // 配置信息
    config: {
        getApiUrl: () => ipcRenderer.invoke('config:get-api-url'),
        getEnvironment: () => ipcRenderer.invoke('config:get-environment')
    },

    // 为了兼容性，也暴露一个顶级的 getSources 方法
    getSources: (options) => {
        console.log('[preload] 使用顶级 getSources 方法');
        return ipcRenderer.invoke('desktop-capturer:get-sources', options);
    },
    
    // 配置更新事件监听
    onConfigUpdate: (callback) => {
        ipcRenderer.on('config-update', (event, config) => callback(config));
        // 返回一个函数用于移除监听器
        return () => ipcRenderer.removeListener('config-update', callback);
    }
};

// 暴露给渲染进程
contextBridge.exposeInMainWorld('electronAPI', electronAPI);

// 调试信息
console.log('[preload] Electron API 已注入到渲染进程');
console.log('[preload] 可用方法:', Object.keys(electronAPI));
if (electronAPI.desktopCapturer) {
    console.log('[preload] desktopCapturer 方法:', Object.keys(electronAPI.desktopCapturer));
}

// 拦截所有链接点击，强制在当前窗口打开
document.addEventListener('DOMContentLoaded', () => {
    // 拦截普通链接
    document.addEventListener('click', (event) => {
        const link = event.target.closest('a');
        if (link && link.href && link.target === '_blank') {
            event.preventDefault();
            event.stopPropagation();
            // 通知主进程在当前窗口打开
            if (window.electronAPI && window.electronAPI.openInMainWindow) {
                window.electronAPI.openInMainWindow(link.href);
            } else {
                window.location.href = link.href;
            }
        }
    });

    // 拦截JavaScript的window.open调用
    const originalWindowOpen = window.open;
    window.open = function(url, windowName, windowFeatures) {
        console.log('拦截window.open:', url);
        if (url && window.electronAPI && window.electronAPI.openInMainWindow) {
            window.electronAPI.openInMainWindow(url);
            return null;
        }
        return originalWindowOpen.call(window, url, windowName, windowFeatures);
    };
});